# О hardware-monitoring
Легковесный мониторинг оборудования (сейчас только CPU) с сохранением исторических данных и отображением
их в браузере в виде графиков.


# Текущий функционал:
1. Каждую секунду собирает метрики CPU (потребление в процентах, температура, частота).
2. Данные записываются в файлы (свой для каждой метрики)
3. Фронтенд каждую секунду вычитывает новую информацию из файлов и отображает графики

# Планируемый функционал:
1. Добавить агрегацию
2. Выбор отображаемого диапазона
3. Поиск аномалий
4. Добавление другого оборудования (RAM, DISK, NETWORK etc.)
5. Авторизация?

# Ограничения
Теоретически будет работать на любом современном дистрибутиве Linux,
предпочтительнее версии LTS. Тестировалось на Debian 12.
Не работает на Mac OS и Windows, поскольку использует библиотеки Linux.

# Техническая реализация
### Бэкенд 
написан на Rust, можно запустить как Linux-service и запускать на старте системы.
На бэкенде нет REST API, он только пишет файлы с метриками.
Файлы раздаются Nginx как статика, которые с помощью Range запросов можно
читать по частям.

### Фронтенд
JS запускаемый в браузере который каждую секунду запрашивает данные
появившиеся за последнюю секунду для каждой выбранной метрики.

# Запуск frontend
Поскольку бэкенд это статика в виде HTML+JS, а также данные мониторинга
тоже статические файлы, нам нужен HTTP-сервер для их раздачи.
Локально можно поднять внутри Nginx.
Для этого выполнить в терминале:
```bash
cd localsetup
./run_frontend.sh
```
Открыть в браузере http://localhost:8080
Появится график который будет обновляться каждую секунду.
Бакенд используется с сайта https://mekhanikov.pro/pages/monitoring.html
для наглядности и быстроты старта, Вам надо будет поправить конфиги на свой бакенд. 

# Запуск backend на удаленной машине
создать файл `hardware-monitoring/localsetup/.env` вида
```bash
export SSH_USER_ADDR=username@ip_addr
```
Где `username` и `ip_addr` заменить на вашего пользователя и IP.
Далее выполнить в терминале:
```bash
cd localsetup
./build_remote.sh
```
Команда копирует на удаленную машину исходники, соберет их там и запустит
как если бы запустили локально, логи буду выводится в терминале,
для остановки Ctrl-C

Предварительно на удаленной машине надо установить Rust

# Запуск backend
Локально или на сервере где надо установить мониторинг выполнить:

### Устанавливаем Rust
```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
apt install build-essential
```

 Проверяем что все настроено верно
```bash
rustup -v
rustup check
rustup update

cd hardware-monitoring
cargo check
```

Для сборки требуется установить пакеты
```bash
apt install libsensors4-dev
apt install libclang-dev
```

Сборка
```bash
cd backend
cargo run
```
